package xml和xsd的校验;

import org.xml.sax.SAXException;

import javax.xml.transform.Source;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import javax.xml.validation.Validator;
import java.io.File;
import java.io.IOException;

public class Main {
    public static void main(String[] args){
        boolean a = false;
        try {
            //第一个参数放入你的xsd文件，第二个你的xml文件，就会调用方法去验证
            //如何不符合规范，就会报错，符合就会输出true成功
            a = Validatexml("file/xml/test.001.001.01.xsd",
                    "file/xml/test.001.001.01.xml");
        } catch (SAXException e) {
            a = false;
            System.out.println("sax错误，验证不通过");
            e.printStackTrace();
        } catch (IOException e) {
            a = false;
            System.out.println("io错误，验证不通过");
            e.printStackTrace();
        }
        System.out.println(a);
    }

    public static boolean Validatexml(String xsdpath,String xmlpath) throws SAXException,IOException{
        //建立schema工厂
        SchemaFactory schemaFactory=SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");
        //建立验证文档文件对象，利用此文件对象所封装的文件进行schema验证
        File schemaFile=new File(xsdpath);
        //利用schema工厂，接收验证文档文件对象生成Schema对象
        Schema schema=schemaFactory.newSchema(schemaFile);
        //通过Schema产生针对于此Schema的验证器，利用schenaFile进行验证
        Validator validator=schema.newValidator();
        //得到验证的数据源
        Source source=new StreamSource(xmlpath);

        //开始验证，成功输出success!!!，失败输出fail
        validator.validate(source);


        return true;
    }

}
